/*******************************************************************************  
* 文件名称：蓝桥杯单片机第十三届国赛
* 实验目的：完成赛题要求
* 程序说明：
* 字体格式：UTF-8
* 日期版本：2023-4-5	
******************************************************************************/

/*********头文件*********/
#include <STC15F2K60S2.H>
#include "intrins.h"
#include "iic.h"
#include "SMG.h"
#include "Timer.h"
#include "Key.h"
#include "onewire.h"
#include "iic.h"
#include "ultrasonic.h"
//#include "uart.h"

/*********宏定义*********/
#define uchar unsigned char 
#define uint  unsigned int
	
unsigned char frequency_time_flag;	//频率读取的 时间标志位



void main()
{
	P0 = 0x00;	
	P2 = P2 & 0x1F | 0xA0;	//先送数据，再开锁存器
	P2 &= 0x1f;
	
	
	Power_System_All_Init();
	
	Timer0_Init();	//NE555测频率的定时器0初始化
	Timer1_Init();	//超声波初始化
	Timer2_Init();	//1ms基准定时
	
	
	P0 = ~0x01;	
	P2 = P2 & 0x1F | 0x80;	//先送数据，再开锁存器
	DS18B20_GetTemperature();	Delay_ms(800);
	
	while(1)
	{
		SMG_Show_Data();	//数码管显示
		Key4_Proc();		//按键扫描
		
		/********频率读取********/
		if (frequency_time_flag == 1)
		{
			frequency_time_flag = 0;
			//频率读取
			TR0 = 0;
			Frequency_Data = TH0*256+TL0;
			Frequency_Data = Frequency_Data * 2;
			TL0=0;
			TH0=0;
			TR0=1;
			
			uc_PCF_ADC_0x03_Data = PCF8591_ADC_Read(0x03);//和频率读取放在一起，先少定义一个标志位，偷个懒
		}
		
		
		Ultra_Distance = Ultrasonic_Ranging();	//超声波的读取, 已经定时读取了, 所以直接调用函数即可
		
		//	DAC输出
//		PCF8591_DAC_Out(255);

		
	}
}


// 定时器2 中断服务函数模板
void Timer2_Routine() interrupt 12  // 1T 16位自动重载
{
	static unsigned char i, smg_scan_cnt;	//数码管
	static unsigned char key4_count;	//独立按键
	static unsigned int  Temperature_cnt;
	static unsigned int  frequency_cnt;
	static unsigned int  Ultra_Time_cnt;
	ui_ChangAn_ms++;
	
	//注意变量要加加！！！！！！！！！
	
	
	smg_scan_cnt++;				//数码管扫描时间
	if (smg_scan_cnt >= 1)		//2ms扫描一次数码管
	{
		smg_scan_cnt = 0;		//软件复位
		P2 = 0xE0; P0 = 0xFF;	//定时器扫描数码管，先消影，就不会出现残影了!!！
		P2 = 0xC0; P0 = 0x01<<i;
		if (menu_index == 0) {P2 = 0xE0; P0 = menu1[i]; P2 = 0;}
		if (menu_index == 1) {P2 = 0xE0; P0 = menu2[i]; P2 = 0;}
		if (menu_index == 2) {P2 = 0xE0; P0 = menu3[i]; P2 = 0;}
		if (menu_index == 3) {P2 = 0xE0; P0 = menu4[i]; P2 = 0;}
		if (menu_index == 4) {P2 = 0xE0; P0 = menu5[i]; P2 = 0;}
		if (menu_index == 5) {P2 = 0xE0; P0 = menu6[i]; P2 = 0;}
		i ++;
		i = i % 8;
	}
	
	if (++key4_count >= 10)	//独立按键的扫描
	{
		key4_count = 0;
		uc_Key_flag = 0;
	}
	
	if (++Temperature_cnt >= 900)	//小于1s读取一次
	{
		Temperature_cnt = 0;
		
	}
	if (++frequency_cnt >= 1000)	//频率读取 1S
	{
		frequency_cnt = 0;
		frequency_time_flag = 1;
	}
	
	Ultra_Time_cnt++;	//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
	if (Ultra_Time_cnt >= 100)	//200ms
	{
		Ultra_Time_cnt = 0;
		Ultrasonic_Time_Flag = 1;
	}

}



//UART 中断服务程序
//void Uart_ISR(void) interrupt 4
//{
//  if(RI == 1) //接收完一个字节数据
//	{
//	  RI = 0;  //清除RI位
//	  puc_Uart_Rece_String[uc_Uart_Rece_num++] = SBUF;  //保存串口数据
//	}
//}

//定时器0中断服务函数
//void Timer0_Rountine(void) interrupt 1
//{
//	static unsigned int  T0Count0;
//	

//	T0Count0++;
//	if(T0Count0 >= 1000)
//	{
//		//执行操作
//		
//		T0Count0 = 0;	//软件复位
//	}

//}	
